<?php

session_start();
include_once("Conexion.php");
error_reporting(0);
date_default_timezone_set("America/Guatemala");

class Bdd {

    var $con;
    var $claveEncriptacion;

    function Bdd() {
        $this->con = new DBManager;
        $this->claveEncriptacion = $this->getClaveEncriptacion();
    }

    //consultar clave para encriptar
    function getClaveEncriptacion() {
//        $query = "select valor from valor_parametro vp
//					join parametro p on vp.parametro = p.PARAMETRO 
//					where p.PARAMETRO = 1 ";
//        $rs = $this->consulta($query);
//        $fila = mysqli_fetch_array($rs);
//        $clave = $fila[0];

        return "claveEncriptacion310707";
    }

    function formatearCadena($cadena) {
        $con = $this->con->conectar();
        if ($con != null) {
            $retorno = mysqli_real_escape_string($con, $cadena);
            mysqli_close($con);
            return $retorno;
        }
        return null;
    }

    function ejecutarConsulta($query) {
        $con = $this->con->conectar();
        if ($con != null) {
            $resultado = mysqli_query($con, $query);
            mysqli_close($con);
            return $resultado;
        }
        return null;
    }

    function obtenerMaxTabla($cad) {
        $con = $this->con->conectar();
        if ($con != null) {
            $rs = mysqli_query($con, $cad);
            $ultimo = mysqli_fetch_row($rs);

            mysqli_close($con);

            if ($ultimo[0] == null) {
                return 1;
            } else {
                return $ultimo[0] + 1;
            }
        }
    }

    function primerIdSinUtilizar($nombreTabla, $idTabla) {
        $query = " SELECT IF(COUNT(Id) > 0, MIN(Id),1) uid FROM (
					SELECT t1.$idTabla + 1 AS Id
					FROM $nombreTabla t1
					WHERE NOT EXISTS(SELECT * FROM $nombreTabla t2 WHERE t2.$idTabla = t1.$idTabla + 1 )
					UNION 
					SELECT 1 Id
					from $nombreTabla
					WHERE NOT EXISTS (SELECT * FROM $nombreTabla t3 WHERE t3.$idTabla = 1)) ot
					ORDER BY 1 limit 1;";
        $con = $this->con->conectar();
        if ($con != null) {
            $rs = mysqli_query($con, $query);
            $ultimo = mysqli_fetch_row($rs);

            mysqli_close($con);

            if ($ultimo[0] == null) {
                return 1;
            } else {
                return $ultimo[0];
            }
        }
    }

    function existe($c) {
        if ($this->con->conectar() == true) {
            $rse = mysql_query($c);

            if (mysql_num_rows($rse) > 0) {
                return 1;
            } else {
                return 0;
            }
        }
    }

    function encriptar($string) {
        $key = $this->claveEncriptacion;
        $result = '';
        for ($i = 0; $i < strlen($string); $i++) {
            $char = substr($string, $i, 1);
            $keychar = substr($key, ($i % strlen($key)) - 1, 1);
            $char = chr(ord($char) + ord($keychar));
            $result.=$char;
        }
        $retorno = base64_encode($result);
        return rawurlencode($retorno);
    }

    function desencriptar($string, $key) {
        $result = '';
        $string = rawurldecode($string);
        $string = base64_decode($string);
        for ($i = 0; $i < strlen($string); $i++) {
            $char = substr($string, $i, 1);
            $keychar = substr($key, ($i % strlen($key)) - 1, 1);
            $char = chr(ord($char) - ord($keychar));
            $result.=$char;
        }

        return $result;
    }

    function depurar_cadena($string) {
        $string = trim($string);
        $string = str_replace(array('á', 'à', 'ä', 'â', 'ª', 'Á', 'À', 'Â', 'Ä'), array('a', 'a', 'a', 'a', 'a', 'A', 'A', 'A', 'A'), $string);
        $string = str_replace(array('é', 'è', 'ë', 'ê', 'É', 'È', 'Ê', 'Ë'), array('e', 'e', 'e', 'e', 'E', 'E', 'E', 'E'), $string);
        $string = str_replace(array('í', 'ì', 'ï', 'î', 'Í', 'Ì', 'Ï', 'Î'), array('i', 'i', 'i', 'i', 'I', 'I', 'I', 'I'), $string);
        $string = str_replace(array('ó', 'ò', 'ö', 'ô', 'Ó', 'Ò', 'Ö', 'Ô'), array('o', 'o', 'o', 'o', 'O', 'O', 'O', 'O'), $string);
        $string = str_replace(array('ú', 'ù', 'ü', 'û', 'Ú', 'Ù', 'Û', 'Ü'), array('u', 'u', 'u', 'u', 'U', 'U', 'U', 'U'), $string);
        $string = str_replace(array('ñ', 'Ñ', 'ç', 'Ç'), array('n', 'N', 'c', 'C',), $string);
        $string = str_replace(array("\\", "¨", "º", "-", "~", "#", "@", "|", "!", "\"", "·", "$", "%", "&", "/", "(", ")", "?", "'", "¡",
            "¿", "[", "^", "`", "]", "+", "}", "{", "¨", "´", ">", "<", ";", ",", ":", "*", " "), '', $string);
        return $string;
    }

    function eliminarCaracteresEspeciales($texto) {
        $invalidos = array('á', 'é', 'í', 'ó', 'ú', 'Á', 'É', 'Í', 'Ó', 'Ú', 'à', 'è', 'ì', 'ò', 'ù', 'À', 'È', 'Ì', 'Ò', 'Ù', 'ñ', 'Ñ', 'ü', 'Ü');
        $validos = array('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U', 'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U', 'n', 'N', 'u', 'U');
        return str_replace($invalidos, $validos, $texto);
    }

}

function generarClave($longitud) {
    $cadena = "[^A-Z0-9]";
    return substr(eregi_replace($cadena, "", md5(rand())) .
            eregi_replace($cadena, "", md5(rand())) .
            eregi_replace($cadena, "", md5(rand())), 0, $longitud);
}

/*
 * Funcion independiente de la clase conexion para comprobar el acceso
 * a las pantallas. En cada pagina se debe llamar esta funcion para
 * enviandole el nombre de la pagina (Pagina.php) y una variable de la
 * instancia de la base de datos para que pueda realizar la comprobacion.
 *
 * */

function comprobarAcceso($pagina, $bdd) {
    if (($_SESSION['ROL'] == 1 and !isset($_SESSION['PERSONA'])) or
            ($_SESSION['ROL'] == 3 and !isset($_SESSION['EMPRESA']))
    ) {
        $_SESSION['MSG'] = "Su sesi&oacute;n ha caducado, inicie sesi&oacute;n nuevamente.";
        header("Location: Logout.php");
        exit();
    }

    $rol = $_SESSION['ROL'];
    $pagina = getNameOfPage($pagina);

    $query = "select PANTALLA 
                from pantalla
                where url = '$pagina'
                and rol = $rol
                and estado=0;";
    $rs = $bdd->ejecutarConsulta($query);
    if (mysqli_num_rows($rs) == 0) {
        $_SESSION['MSG'] = "No tiene permiso para ver el contenido solicitado.";
        header("Location: Logout.php");
        exit();
    }
}

function comprobarAccesoAdministrador($bdd) {
    $rolAdmin = 2;
    if($_SESSION['ROL'] != $rolAdmin ) {
        $_SESSION['MSG'] = "Su sesi&oacute;n ha caducado, inicie sesi&oacute;n nuevamente.";
        header("Location: Logout.php");
        exit();
    }

    $USUARIO = $_SESSION['USUARIO'];

    $query = "select USUARIO
                from usuario 
                where USUARIO = $USUARIO
                AND rol = $rolAdmin"; //administrador "2"
    $rs = $bdd->ejecutarConsulta($query);
    if (mysqli_num_rows($rs) == 0) {
        $_SESSION['MSG'] = "No tiene permiso para ver el contenido solicitado.";
        header("Location: Logout.php");
        exit();
    }
}

function getNameOfPage($pagina) {
    $arreglo = explode("?", $pagina);
    return $arreglo[0];
}

function obtenerCamposDinamicos($bdd, $query, $id) {
    $rs2 = $bdd->ejecutarConsulta($query);
    $idsCaracteristicas = "";
    while ($fila2 = mysqli_fetch_assoc($rs2)) {
        $divs .= "<tr>";
        $divs .= "<td style='vertical-align: top;'> " . $fila2['Nombre'] . ":  ";
        if ($fila2['requerido'] == 1) {
            $divs .= "<span class='campoRequerido'>*</span>";
        }
        $divs .= " </td>";
        $divs .= "<td>";
        //verificando el tipo de caracteristica 
        if (strtolower($fila2['Tipo']) == "enumerado") {
            //crear un combo box para cada opcion
            $query = "SELECT pv.POSIBLE_VALOR, pv.valor nombre
                        FROM posible_valor pv join caracteristica c on pv.caracteristica = c.CARACTERISTICA 
                        WHERE c.CARACTERISTICA = " . $fila2['CARACTERISTICA'] . " 
                        AND c.estado = 0 and pv.estado = 0";
            $rsPosibleValor = $bdd->ejecutarConsulta($query);

            //creo el combobox            
            $divs .= "<select id=\"$id-" . $fila2['CARACTERISTICA'] . "\" style='width: 200px' class='selectBox' >";
            $divs .= "<option value=\"-1\" selected>Seleccione...</option>";
            while ($filaPosibleValor = mysqli_fetch_assoc($rsPosibleValor)) {
                $divs .= "<option value=\"" . $filaPosibleValor['nombre'] . "\">" . ($filaPosibleValor['nombre']) . "</option>";
            }
            $divs .= "</select>";
        } else if (strtolower($fila2['Tipo']) == "fecha") {
            $divs .= "<input type=\"text\" id=\"$id-" . $fila2['CARACTERISTICA'] . "\" style='width: 200px' class='cajaTexto' />";
            $divs .= "<script> $(function(){ $('#$id-" . $fila2['CARACTERISTICA'] . "').datepicker({changeMonth: true, changeYear: true });   }); </script>";
        } else if (strtolower($fila2['Tipo']) == "texto") { //textarea
            $divs .= "<textarea id=\"$id-" . $fila2['CARACTERISTICA'] . "\" style='width: 300px; height: 110px' class='cajaTexto' ></textarea>";
        } else {
            //crear cajas de texto            
            $divs .= "<input type=\"text\" id=\"$id-" . $fila2['CARACTERISTICA'] . "\"class='cajaTexto' style='width: 200px' />";
        }
        $idsCaracteristicas .= $fila2['CARACTERISTICA'] . "-";
        $divs .= "</td>";
        $divs .= "</tr>";
    } // fin while
    $divs .= "<tr>";
    $divs .= "<td colspan='2'>";
    $divs .= "<input type='hidden' id='$id-crts' value='$idsCaracteristicas' />";
    $divs .= "</tr>";
    return $divs;
}
function validarCamposDinamicos($bdd,$query,$arreglo1,$arreglo2) {    
    $insertarRegistro = 1;
    $mensaje = "";

    $rs = $bdd->ejecutarConsulta($query);
    while ($fila = mysqli_fetch_assoc($rs)) {

        $tipoCaracteristica = $fila['Tipo'];
        $posicion = buscarElemento($arreglo1, $fila['CARACTERISTICA']);
        if($posicion == -1){            
            return array(0,"Complete todos los campos.<br>");
        }
        $patron = $fila['patron'];
        $obligatorio = $fila['obligatorio'];
        $valorPost = $bdd->formatearCadena($arreglo2[$posicion]);

        if ($tipoCaracteristica == "enumerado") {
            if ($valorPost == "-1" and $obligatorio == 1) { //error	
                $insertarRegistro = -1;
                $mensaje .= "- El valor del campo: " . $fila['Nombre'] . ", no es v&aacute;lido.<br>";
            } 
        } else {
            if ($valorPost == "" and $obligatorio == 1) {
                //error, el campo es obligatorio
                $insertarRegistro = -1;
                $mensaje .= "- El campo: " . $fila['Nombre'] . ", es obligatorio.<br>";
            } else {
                //ok, revisar el valor del campo        
                
                    if (!preg_match($patron, $valorPost)) { //error
                        $insertarRegistro = -1;
                        $mensaje .= "- El valor del campo: " . $fila['Nombre'] . ", no es v&aacute;lido.<br>";
                    }
                
                
            }
        }
    } //fin while
    return array($insertarRegistro,$mensaje);
}

function buscarElemento($arr1, $e) {
    for ($k = 0; $k < count($arr1); $k++) {
        if ($arr1[$k] == $e) {
            return $k;
        }
    }
    return -1;
}
function getMsgErrorDenied(){
    echo "<div style='color:#555; border-radius:10px; padding:10px 36px; margin:10px; text-align: left;"
            . "font-weight:bold; text-transform:capitalize; background:#ffecec; border:1px solid #f5aca6; width: 50%; "
            . " margin: auto; margin-top: 50px;  ' > "
            . "<span><b>Error!</b></span><br>No tiene permiso para ver este contenido.</div>";
}

function getTipoCliente($tipo){
    
    switch($tipo){
        case 0:
            return "Normal";
            break;
        case 1:
            return "Regular";
            break;
        case 2:
            return "Avanzado";
            break;
        default:
            return "Usuario normal";
            break;
    }
    
}
function getEstadoCuenta($tipo){
    
    switch($tipo){
        case 0:
            return "Activa";
            break;
        case 1:
            return "Suspendida";
            break;
        case 2:
            return "Denegada";
            break;
        default:
            return "Inactiva";
            break;
    }
    
}
function getMoneda($tipo){
    
    switch($tipo){
        case 0:
            return "Dolares";
            break;
        case 1:
            return "Quetzales";
            break;
        case 2:
            return "Pesos";
            break;
        default:
            return "Quetzales";
            break;
    }
    
}
function getTipoServicio($tipo){
    
    switch($tipo){
        case 0:
            return "Activa";
            break;
        case 1:
            return "Suspendido";
            break;
        case 2:
            return "Inaccesible";
            break;
        default:
            return "Activa";
            break;
    }
    
}

function getTipoCanal($tipo){
    
    switch($tipo){
        case 0:
            return "Banca en línea";
            break;
        case 1:
            return "Banca móvil";
            break;
        default:
            return "Banca en línea";
            break;
    }
    
}


?>
